import UIKit

@available(iOS 3.0, *)
extension QKC where AA :UIPasteboard {
    open func name_qk_g() -> QKC<AA,YY,ZZ, UIPasteboard.Name >{
		 self +^ self.value.name
	}

    open func isPersistent_qk_g() -> QKC<AA,YY,ZZ, Bool >{
		 self +^ self.value.isPersistent
	}

    open func changeCount_qk_g() -> QKC<AA,YY,ZZ, Int >{
		 self +^ self.value.changeCount
	}

	// Item provider interface
    @available(iOS 11.0, *)
    open func itemProviders_qk_s(_ itemProviders:  [NSItemProvider]) -> QKC<AA,YY,ZZ, [NSItemProvider]>{
		return link(next: itemProviders).then_QK { $0.value.itemProviders = itemProviders }
	}
    @available(iOS 11.0, *)
    open func itemProviders_qk_g() -> QKC<AA,YY,ZZ, [NSItemProvider]>{
		 self +^ self.value.itemProviders
	}

	// First item
    open func types_qk_g() -> QKC<AA,YY,ZZ, [String] >{
		 self +^ self.value.types
	}

	// Multiple items
    open func numberOfItems_qk_g() -> QKC<AA,YY,ZZ, Int >{
		 self +^ self.value.numberOfItems
	}

	// Direct access
    open func items_qk_s(_ items:  [[String : Any]]) -> QKC<AA,YY,ZZ, [[String : Any]]>{
		return link(next: items).then_QK { $0.value.items = items }
	}
    open func items_qk_g() -> QKC<AA,YY,ZZ, [[String : Any]]>{
		 self +^ self.value.items
	}

    open func string_qk_s(_ string:  String?) -> QKC<AA,YY,ZZ, String?>{
		return link(next: string).then_QK { $0.value.string = string }
	}
    open func string_qk_g() -> QKC<AA,YY,ZZ, String?>{
		 self +^ self.value.string
	}

    open func strings_qk_s(_ strings:  [String]?) -> QKC<AA,YY,ZZ, [String]?>{
		return link(next: strings).then_QK { $0.value.strings = strings }
	}
    open func strings_qk_g() -> QKC<AA,YY,ZZ, [String]?>{
		 self +^ self.value.strings
	}

    open func url_qk_s(_ url:  URL?) -> QKC<AA,YY,ZZ, URL?>{
		return link(next: url).then_QK { $0.value.url = url }
	}
    open func url_qk_g() -> QKC<AA,YY,ZZ, URL?>{
		 self +^ self.value.url
	}

    open func urls_qk_s(_ urls:  [URL]?) -> QKC<AA,YY,ZZ, [URL]?>{
		return link(next: urls).then_QK { $0.value.urls = urls }
	}
    open func urls_qk_g() -> QKC<AA,YY,ZZ, [URL]?>{
		 self +^ self.value.urls
	}

     open func image_qk_s(_ image:  UIImage?) -> QKC<AA,YY,ZZ, UIImage?>{
		return link(next: image).then_QK { $0.value.image = image }
	}
     open func image_qk_g() -> QKC<AA,YY,ZZ, UIImage?>{
		 self +^ self.value.image
	}

    open func images_qk_s(_ images:  [UIImage]?) -> QKC<AA,YY,ZZ, [UIImage]?>{
		return link(next: images).then_QK { $0.value.images = images }
	}
    open func images_qk_g() -> QKC<AA,YY,ZZ, [UIImage]?>{
		 self +^ self.value.images
	}

     open func color_qk_s(_ color:  UIColor?) -> QKC<AA,YY,ZZ, UIColor?>{
		return link(next: color).then_QK { $0.value.color = color }
	}
     open func color_qk_g() -> QKC<AA,YY,ZZ, UIColor?>{
		 self +^ self.value.color
	}

    open func colors_qk_s(_ colors:  [UIColor]?) -> QKC<AA,YY,ZZ, [UIColor]?>{
		return link(next: colors).then_QK { $0.value.colors = colors }
	}
    open func colors_qk_g() -> QKC<AA,YY,ZZ, [UIColor]?>{
		 self +^ self.value.colors
	}

	// Queries
    @available(iOS 10.0, *)
    open func hasStrings_qk_g() -> QKC<AA,YY,ZZ, Bool >{
		 self +^ self.value.hasStrings
	}

    @available(iOS 10.0, *)
    open func hasURLs_qk_g() -> QKC<AA,YY,ZZ, Bool >{
		 self +^ self.value.hasURLs
	}

    @available(iOS 10.0, *)
    open func hasImages_qk_g() -> QKC<AA,YY,ZZ, Bool >{
		 self +^ self.value.hasImages
	}

    @available(iOS 10.0, *)
    open func hasColors_qk_g() -> QKC<AA,YY,ZZ, Bool >{
		 self +^ self.value.hasColors
	}

    @available(iOS, introduced: 3.0, deprecated: 10.0, message: "Do not set persistence on pasteboards. This property is set automatically.")
    open func setPersistent_qk_f(_ persistent: Bool) -> QKC<AA,YY,ZZ, Bool>{
		 self +^ self.value.setPersistent(persistent) +^ persistent
	}

    @available(iOS 11.0, *)
    open func setItemProviders_qk_f(_ itemProviders: [NSItemProvider], localOnly: Bool, expirationDate: Date?) -> QKC<AA,YY,ZZ, [NSItemProvider]>{
		 self +^ self.value.setItemProviders(itemProviders, localOnly:localOnly, expirationDate:expirationDate) +^ itemProviders
	}

	// Automatically creates item providers wrapping the objects passed in.
    @available(iOS 11.0, *)
    open func setObjects_qk_f(_ objects: [NSItemProviderWriting]) -> QKC<AA,YY,ZZ, [NSItemProviderWriting]>{
		 self +^ self.value.setObjects(objects) +^ objects
	}

    @available(iOS 11.0, *)
    open func setObjects_qk_f(_ objects: [NSItemProviderWriting], localOnly: Bool, expirationDate: Date?) -> QKC<AA,YY,ZZ, [NSItemProviderWriting]>{
		 self +^ self.value.setObjects(objects, localOnly:localOnly, expirationDate:expirationDate) +^ objects
	}

    open func contains_qk_f(pasteboardTypes: [String]) -> QKC<AA,YY,ZZ,Bool>{
		 self +^ self.value.contains(pasteboardTypes:pasteboardTypes)
	}

    open func data_qk_f(forPasteboardType pasteboardType: String) -> QKC<AA,YY,ZZ,Data?>{
		 self +^ self.value.data(forPasteboardType:pasteboardType)
	}

    open func value_qk_f(forPasteboardType pasteboardType: String) -> QKC<AA,YY,ZZ,Any?>{
		 self +^ self.value.value(forPasteboardType:pasteboardType)
	}

    open func setValue_qk_f(_ value: Any, forPasteboardType pasteboardType: String) -> QKC<AA,YY,ZZ, Any>{
		 self +^ self.value.setValue(value, forPasteboardType:pasteboardType) +^ value
	}

    open func setData_qk_f(_ data: Data, forPasteboardType pasteboardType: String) -> QKC<AA,YY,ZZ, Data>{
		 self +^ self.value.setData(data, forPasteboardType:pasteboardType) +^ data
	}

    open func types_qk_f(forItemSet itemSet: IndexSet?) -> QKC<AA,YY,ZZ,[[String]]?>{
		 self +^ self.value.types(forItemSet:itemSet)
	}

    open func contains_qk_f(pasteboardTypes: [String], inItemSet itemSet: IndexSet?) -> QKC<AA,YY,ZZ,Bool>{
		 self +^ self.value.contains(pasteboardTypes:pasteboardTypes, inItemSet:itemSet)
	}

    open func itemSet_qk_f(withPasteboardTypes pasteboardTypes: [String]) -> QKC<AA,YY,ZZ,IndexSet?>{
		 self +^ self.value.itemSet(withPasteboardTypes:pasteboardTypes)
	}

    open func values_qk_f(forPasteboardType pasteboardType: String, inItemSet itemSet: IndexSet?) -> QKC<AA,YY,ZZ,[Any]?>{
		 self +^ self.value.values(forPasteboardType:pasteboardType, inItemSet:itemSet)
	}

   
    

    open func addItems_qk_f(_ items: [[String : Any]]) -> QKC<AA,YY,ZZ, [[String : Any]]>{
		 self +^ self.value.addItems(items) +^ items
	}

	// Value: NSNumber, boolean.
    @available(iOS 10.0, *)
    open func setItems_qk_f(_ items: [[String : Any]], options: [UIPasteboard.OptionsKey : Any] = [:]) -> QKC<AA,YY,ZZ, [[String : Any]]>{
		 self +^ self.value.setItems(items, options:options) +^ items
	}

}

extension QKC where AA :UIPasteboard {
}

